package chemtools_logica.BDL.SFBean;

import chemtools_logica.BDL.IL.BDL_SFLaboratorioLocal;
import chemtools_logica.BDL.IR.BDL_SFLaboratorioRemote;

import chemtools_logica.Beans.LaboratorioBean;

import chemtools_logica.Entidades.Formula;
import chemtools_logica.Entidades.Laboratorio;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "BDL_SFLaboratorio", mappedName = "map-BDL_SFLaboratorio")
public class BDL_SFLaboratorioBean implements BDL_SFLaboratorioRemote, BDL_SFLaboratorioLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    public BDL_SFLaboratorioBean() {
    }

    public Laboratorio persistLaboratorio(Laboratorio laboratorio) {
        em.persist(laboratorio);
        em.flush();
        return laboratorio;
    }

    public Laboratorio mergeLaboratorio(Laboratorio laboratorio) {
        return em.merge(laboratorio);
    }

    public void removeLaboratorio(Laboratorio laboratorio) {
        laboratorio = em.find(Laboratorio.class, laboratorio.getIdLaboratorio());
        em.remove(laboratorio);
    }

    /** <code>select o from Laboratorio o</code> */
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Laboratorio> getLaboratorioFindAll() {
        return em.createNamedQuery("Laboratorio.findAll", Laboratorio.class).getResultList();
    }

    public List<Laboratorio> getLaboratoriosActivos() {
        List<Laboratorio> listaEntidad = new ArrayList<Laboratorio>();

        String ejb = "SELECT u FROM Laboratorio u WHERE u.estado = 1 ";

        try {
            Query query = em.createQuery(ejb);
            listaEntidad = query.getResultList();
        } catch (Exception e) {
        }

        return listaEntidad;
    }

    public List<Laboratorio> buscaLaboratorios(LaboratorioBean laboratorio) {
        String ejbQuery = "select f FROM Laboratorio f where 1=1 ";

        if (laboratorio.getIdLaboratorio() != 0) {
            ejbQuery += " and f.idLaboratorio = " + laboratorio.getIdLaboratorio();
        }

        if (laboratorio.getNombre() != null && !laboratorio.getNombre().equals("")) {
            ejbQuery += " and f.nombre like '%" + laboratorio.getNombre() + "%'";
        }

        if (laboratorio.getDireccion() != null && !laboratorio.getDireccion().equals("")) {
            ejbQuery += " and f.direccion like '%" + laboratorio.getDireccion() + "%'";
        }

        if (laboratorio.getNombre_Encargado() != null && !laboratorio.getNombre_Encargado().equals("")) {
            ejbQuery += " and f.nombre_Encargado like '%" + laboratorio.getNombre_Encargado() + "%'";
        }

        if (laboratorio.getEstado() >= 0) {
            ejbQuery += " and f.estado=" + laboratorio.getEstado();
        }

        System.out.println(ejbQuery);

        return em.createQuery(ejbQuery, Laboratorio.class).getResultList();

    }
    
    public boolean existeLaboratorio(String nombreLaboratorio){
            String ejbQuery = "select f FROM Laboratorio f where 1=1 ";
            ejbQuery += " and f.nombre = '" + nombreLaboratorio + "'";
            return em.createQuery(ejbQuery, Laboratorio.class).getResultList().size()>0;
        }
}
